/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */

export {
	typeNameSymbol,
	typeSchemaSymbol,
	contentSchemaSymbol,
	type WithType,
	type TreeNodeSchema,
	type AnnotatedAllowedType,
	type AllowedTypesFullEvaluated,
	NodeKind,
	type TreeNodeSchemaClass,
	type TreeNodeSchemaNonClass,
	type TreeNodeSchemaCore,
	TreeNode,
	type Unhydrated,
	type InternalTreeNode,
	isTreeNode,
	tryDisposeTreeNode,
	HydratedContext,
	SimpleContextSlot,
	getInnerNode,
	getOrCreateNodeFromInnerNode,
	getOrCreateNodeFromInnerUnboxedNode,
	getKernel,
	type NodeFromSchema,
	isTreeNodeSchemaClass,
	type TreeNodeFromImplicitAllowedTypes,
	type InsertableTreeNodeFromImplicitAllowedTypes,
	type TreeLeafValue,
	type AllowedTypes,
	type InsertableTreeNodeFromAllowedTypes,
	type InsertableTypedNode,
	type NodeBuilderData,
	type Input,
	normalizeAllowedTypes,
	type NodeSchemaMetadata,
	type ImplicitAllowedTypes,
	type AllowedTypesMetadata,
	evaluateLazySchema,
	type UnannotateAllowedTypesList,
	type AllowedTypeMetadata,
	type AnnotatedAllowedTypes,
	SchemaUpgrade,
	type LazyItem,
	type FlexList,
	type FlexListToUnion,
	type ExtractItemType,
	walkNodeSchema,
	walkAllowedTypes,
	type SchemaVisitor,
	type SimpleNodeSchemaBase,
	withBufferedTreeEvents,
	type AnnotateAllowedTypesList,
	type AllowedTypesFull,
	type AllowedTypesFullFromMixed,
	AnnotatedAllowedTypesInternal,
	type NumberKeys,
	ExpectStored,
	createSchemaUpgrade,
} from "./core/index.js";
export { walkFieldSchema } from "./walkFieldSchema.js";
export type { UnsafeUnknownSchema, Insertable } from "./unsafeUnknownSchema.js";
export {
	type ITree,
	type TreeView,
	type ViewableTree,
	type TreeViewEvents,
	TreeViewConfiguration,
	TreeViewConfigurationAlpha,
	type ITreeViewConfiguration,
	type SchemaCompatibilityStatus,
	type ITreeConfigurationOptions,
	SchemaFactory,
	scoped,
	SchemaFactoryBeta,
	type SchemaStaticsBeta,
	SchemaFactoryAlpha,
	type ObjectSchemaOptionsAlpha,
	type ObjectSchemaOptions,
	type ScopedSchemaName,
	type ValidateRecursiveSchema,
	type FixRecursiveArraySchema,
	adaptEnum,
	enumFromStrings,
	singletonSchema,
	treeNodeApi,
	type TreeNodeApi,
	type NodeChangedData,
	borrowCursorFromTreeNodeOrValue,
	exportConcise,
	importConcise,
	TreeBeta,
	type TreeChangeEventsBeta,
	type SimpleTreeIndex,
	type IdentifierIndex,
	createSimpleTreeIndex,
	createIdentifierIndex,
	type DirtyTreeStatus,
	trackDirtyNodes,
	type DirtyTreeMap,
	type JsonSchemaId,
	type JsonSchemaType,
	type JsonObjectNodeSchema,
	type JsonArrayNodeSchema,
	type JsonMapNodeSchema,
	type JsonLeafNodeSchema,
	type JsonSchemaRef,
	type JsonRefPath,
	type JsonNodeSchema,
	type JsonNodeSchemaBase,
	type JsonTreeSchema,
	type JsonFieldSchema,
	type JsonLeafSchemaType,
	type JsonRecordNodeSchema,
	type JsonStringKeyPatternProperties,
	type TreeSchemaEncodingOptions,
	getJsonSchema,
	getSimpleSchema,
	type VerboseTreeNode,
	type TreeEncodingOptions,
	type VerboseTree,
	extractPersistedSchema,
	comparePersistedSchema,
	type ConciseTree,
	SchemaCompatibilityTester,
	type Unenforced,
	type System_Unsafe,
	type ArrayNodeCustomizableSchemaUnsafe,
	type MapNodeCustomizableSchemaUnsafe,
	type TreeRecordNodeUnsafe,
	type UnannotateAllowedTypeUnsafe,
	type AnnotatedAllowedTypeUnsafe,
	type AnnotatedAllowedTypesUnsafe,
	type AllowedTypesFullUnsafe,
	type AllowedTypesFullFromMixedUnsafe,
	type UnannotateAllowedTypesListUnsafe,
	type AnnotateAllowedTypesListUnsafe,
	type TreeViewAlpha,
	type TreeViewBeta,
	type TreeBranch,
	type TreeBranchAlpha,
	type TreeBranchEvents,
	getPropertyKeyFromStoredKey,
	getStoredKey,
	tryGetSchema,
	applySchemaToParserOptions,
	cursorFromVerbose,
	verboseFromCursor,
	conciseFromCursor,
	createFromCursor,
	asTreeViewAlpha,
	customFromCursorStored,
	type CustomTreeNode,
	type CustomTreeValue,
	tryStoredSchemaAsArray,
	type SchemaStatics,
	type ITreeAlpha,
	type TransactionConstraint,
	type NodeInDocumentConstraint,
	type RunTransactionParams,
	type VoidTransactionCallbackStatus,
	type TransactionCallbackStatus,
	type TransactionResult,
	type TransactionResultExt,
	type TransactionResultSuccess,
	type TransactionResultFailed,
	rollback,
	generateSchemaFromSimpleSchema,
	replaceConciseTreeHandles,
	replaceHandles,
	replaceVerboseTreeHandles,
	type HandleConverter,
	allowUnused,
	type FieldSchemaAlphaUnsafe,
	getIdentifierFromNode,
	type ValidateRecursiveSchemaTemplate,
	type FixRecursiveRecursionLimit,
	schemaStatics,
	type TreeChangeEvents,
	type NodeSchemaOptions,
	type NodeSchemaOptionsAlpha,
	KeyEncodingOptions,
	type TreeParsingOptions,
	incrementalSummaryHint,
	incrementalEncodingPolicyForAllowedTypes,
	type SchemaFactory_base,
	encodeSchemaCompatibilitySnapshot,
	decodeSchemaCompatibilitySnapshot,
	exportCompatibilitySchemaSnapshot,
	importCompatibilitySchemaSnapshot,
	checkCompatibility,
} from "./api/index.js";
export type {
	SimpleTreeSchema,
	SimpleNodeSchema,
	SimpleFieldSchema,
	SimpleLeafNodeSchema,
	SimpleMapNodeSchema,
	SimpleArrayNodeSchema,
	SimpleObjectNodeSchema,
	SimpleNodeSchemaBaseAlpha,
	SimpleObjectFieldSchema,
	SimpleRecordNodeSchema,
	SimpleAllowedTypeAttributes,
	SchemaType,
} from "./simpleSchema.js";
export {
	type ImplicitFieldSchema,
	type TreeFieldFromImplicitField,
	FieldKind,
	FieldSchema,
	FieldSchemaAlpha,
	type InsertableTreeFieldFromImplicitField,
	type DefaultProvider,
	type FieldProps,
	type FieldPropsAlpha,
	normalizeFieldSchema,
	areFieldSchemaEqual,
	areImplicitFieldSchemaEqual,
	type ApplyKind,
	type FieldSchemaMetadata,
	type InsertableField,
	type ApplyKindInput,
	type ReadableField,
	type ReadSchema,
} from "./fieldSchema.js";
export { tryGetTreeNodeForField } from "./getTreeNodeForField.js";
export {
	type ArrayNodeCustomizableSchema,
	type ArrayNodePojoEmulationSchema,
	ArrayNodeSchema,
	asIndex,
	isArrayNodeSchema,
	IterableTreeArrayContent,
	type ReadonlyArrayNode,
	TreeArrayNode,
	type MapNodeCustomizableSchema,
	type MapNodePojoEmulationSchema,
	MapNodeSchema,
	isMapNodeSchema,
	type TreeMapNode,
	type MapNodeInsertableData,
	type FieldHasDefault,
	type InsertableObjectFromSchemaRecord,
	type ObjectFromSchemaRecord,
	ObjectNodeSchema,
	type ObjectNodeSchemaPrivate,
	objectSchema,
	isObjectNodeSchema,
	type TreeObjectNode,
	setField,
	isRecordNodeSchema,
	type RecordNodeCustomizableSchema,
	type RecordNodeInsertableData,
	type RecordNodePojoEmulationSchema,
	RecordNodeSchema,
	type TreeRecordNode,
} from "./node-kinds/index.js";
export {
	unhydratedFlexTreeFromInsertable,
	type InsertableContent,
	type FactoryContent,
	type FactoryContentObject,
} from "./unhydratedFlexTreeFromInsertable.js";
export {
	prepareForInsertion,
	prepareForInsertionContextless,
} from "./prepareForInsertion.js";
export {
	toStoredSchema,
	convertFieldKind,
	toUpgradeSchema,
	toInitialSchema,
	toUnhydratedSchema,
	restrictiveStoredSchemaGenerationOptions,
	permissiveStoredSchemaGenerationOptions,
} from "./toStoredSchema.js";
export {
	numberSchema,
	stringSchema,
	booleanSchema,
	handleSchema,
	nullSchema,
} from "./leafNodeSchema.js";
export type { LeafSchema } from "./leafNodeSchema.js";
export { getUnhydratedContext } from "./createContext.js";
export { type TreeSchema, createTreeSchema } from "./treeSchema.js";
